/**
 * 表格列配置存储工具
 * 用于保存和读取用户的列显示配置
 */

const STORAGE_KEY_PREFIX = 'table_column_config_'

/**
 * 获取存储的key
 * @param {string} tableKey - 表格唯一标识
 * @returns {string}
 */
function getStorageKey(tableKey) {
  return `${STORAGE_KEY_PREFIX}${tableKey}`
}

/**
 * 保存列配置
 * @param {string} tableKey - 表格唯一标识
 * @param {Array} columns - 列配置数组
 */
export function saveColumnConfig(tableKey, columns) {
  try {
    const config = columns.map(col => ({
      key: col.key || col.dataIndex,
      visible: col.visible !== false // 默认显示
    }))
    localStorage.setItem(getStorageKey(tableKey), JSON.stringify(config))
  } catch (error) {
    console.error('保存列配置失败:', error)
  }
}

/**
 * 获取列配置
 * @param {string} tableKey - 表格唯一标识
 * @returns {Array|null}
 */
export function getColumnConfig(tableKey) {
  try {
    const config = localStorage.getItem(getStorageKey(tableKey))
    return config ? JSON.parse(config) : null
  } catch (error) {
    console.error('读取列配置失败:', error)
    return null
  }
}

/**
 * 清除列配置
 * @param {string} tableKey - 表格唯一标识
 */
export function clearColumnConfig(tableKey) {
  try {
    localStorage.removeItem(getStorageKey(tableKey))
  } catch (error) {
    console.error('清除列配置失败:', error)
  }
}

/**
 * 合并列配置
 * 将用户保存的配置与当前列配置合并
 * @param {Array} columns - 当前列配置
 * @param {Array} savedConfig - 用户保存的配置
 * @returns {Array}
 */
export function mergeColumnConfig(columns, savedConfig) {
  if (!savedConfig || !Array.isArray(savedConfig)) {
    return columns
  }

  const configMap = new Map()
  savedConfig.forEach(item => {
    configMap.set(item.key, item.visible)
  })

  return columns.map(col => {
    const key = col.key || col.dataIndex
    const visible = configMap.has(key) ? configMap.get(key) : true
    return {
      ...col,
      visible
    }
  })
}

